\chapter{Implantation}

\section{Création de la base de données}

Après l'étape de conception de la base de données vient son implantation. Le choix d'implémenter la base avec PHP et MySQL a été retenu pour sa facilité et sa rapidité de prise en main. Le projet a été réalisé au moyen de la distribution de logiciels libres XAMPP pour Linux (\textbf{X} \textbf{A}pache \textbf{M}ySQL \textbf{P}erl \textbf{P}HP).\\

La base de données "association" a été générée à partir d'un script au format SQL standard. Les différentes tables ont été créées selon le modèle suivant qui reprend le code lié à la table "ASSOCIATION":\\

\begin{verbatim}

drop table if exists ASSOCIATION; //supprime une éventuelle table préexistante

create table ASSOCIATION //création de la nouvelle table
(
    ID_ASSOC                     INT AUTO_INCREMENT     not null,
    NOM_ASSOC                    CHAR(30)               not null,
    OBJECTIF                     TEXT                   ,
    COTISATION                   INT(3)                 ,
    constraint pk_association primary key (ID_ASSOC) //ID_ASSOC -> clé primare
);

\end{verbatim}

Différentes contraintes d'intégrité telles que '\texttt{not null}' ont été mises en place afin d'éviter des problèmes lors de l'ajout ou de la modification de données de la base. Les données entrées dans la base doivent respecter un format (INT, CHAR , etc.) préétabli. Ainsi en cas de non respect du format de données, MySQL refuse les requêtes d'ajout/mise à jour et génère un message d'erreur.\\

Pour pouvoir juger le bon fonctionnement de la base, un jeu de données de test a été inséré au moyen de requêtes du type:\\

\begin{verbatim}

INSERT INTO `ASSOCIATION` (`ID_ASSOC`, `NOM_ASSOC`, `OBJECTIF`, `COTISATION`) VALUES
(1, 'Gala', 'Organise le gala des diplomés', 0),
... ;

\end{verbatim}

\section{Implémentation de l'interface PHP}

Par la suite la gestion des données de la base durant l'implémentation de l'interface de gestion en PHP a été effectuée au moyen du gestionnaire phpMyAdmin contenu dans la suite XAMPP.\\

Le connexion entre PHP et la base de donnée se fait au moyen de l'extension PHP Data Objects (PDO), qui définit une interface pour accéder à une base de données depuis PHP. PDO fournit une interface d'abstraction à l'accès de données, ce qui signifie que les mêmes fonctions sont utilisées pour exécuter des requêtes ou récupérer les données quelque soit la base de données utilisée.\\

Ainsi, la connexion et l'établissement d'un pont entre PHP et la base de données s'effectuent d'après les instructions PHP suivantes:\\

\begin{verbatim}

define('DB_SERVER', 'localhost'); // serveur mysql
define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
define('DB_SERVER_PASSWORD', 'sgbd2011'); // mot de passe
define('DB_DATABASE', 'association'); // nom de la base

//connection au serveur:

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_DATABASE, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, $pdo_options);

\end{verbatim}

L'interface PHP implémente différentes requêtes associées à des opérations du type:\\

\begin{itemize}

\item \textbf{Consultation} des données d'une entrée d'une table (ici 'ASSOCIATION'):\\

\begin{verbatim}
  
$id = $_GET['idAssociation'];

$sql = 'SELECT * FROM ASSOCIATION WHERE ID_ASSOC = '.$id;
  
$reponse = $bdd->query($sql);

\end{verbatim}

Ici on récupère les données concernant l'association ayant pour ID \texttt{\$id}.\\

\item \textbf{Mise à jour} des champs d'une entrée d'une table:\\

\begin{verbatim}
//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
$id_assoc  = $_POST["id"] ;
$nom =$_POST["nom"];
$objectif  = $_POST["objectif"] ;
$cotisation  = $_POST["cotisation"] ;


//requête SQL:  
$sql = "UPDATE ASSOCIATION 
        SET NOM_ASSOC = '$nom', 
            OBJECTIF = '$objectif',
            COTISATION = '$cotisation'
        WHERE ID_ASSOC = '$id_assoc'";

//exécution
$bdd->exec($sql); 
\end{verbatim}
A noter que, par soucis de temps, les requêtes de mise à jour n'ont été implémentées que pour les tables 'ASSOCIATION' et 'ADHERENT'. \\

Ici on modifie les données de l'entrée ayant pour ID \texttt{\$id\_assoc} de la table 'ASSOCIATION', on réaffecte chaque champ l'entrée concernée.\\

\item \textbf{Insertion} des données dans une table:\\

\begin{verbatim}

$sql = "INSERT INTO ASSOCIATION VALUES('', '$nom_assoc', '$objectif', '$cotisation')";

\end{verbatim}

\end{itemize}



